package com.axin.common.utils;
import java.util.Random;

import org.apache.commons.collections.set.SynchronizedSortedSet;

import net.sf.jsqlparser.expression.BinaryExpression;



/**
 * 随机字符串工具类
 * @author Axin
 *
 */
public class RandomUtil {

 
   public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  
   public static final String LETTERCHAR = "abcdefghijkllmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";  
   public static final String NUMBERCHAR = "0123456789";  
   public static final String NUMBERBIG = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
 
   
   
   /**
    * 随机生成指定位数的编码，包含大、小写字母及数字
    * @Author Axin
    * @DateTime 2018年10月17日 上午11:19:25
    * @param length
    * @return
    */
   public static String generateString(int length) {  
       StringBuffer sb = new StringBuffer();  
       Random random = new Random();  
       for (int i = 0; i < length; i++) {  
           sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));  
       }  
       return sb.toString();  
   }  
   
   
   /**
    * 随机生成指定位数的编码，包含小写字母及数字
    * @Author Axin
    * @DateTime 2018年10月17日 上午11:19:25
    * @param length
    * @return
    */
   public static String generalCode(int length) {  
       StringBuffer sb = new StringBuffer();  
       Random random = new Random();  
       for (int i = 0; i < length; i++) {  
           sb.append(ALLCHAR.charAt(random.nextInt(NUMBERBIG.length())));  
       }  
       return sb.toString();  
   }
   
   /**
    * 随机生成指定位数的数字字符串
    * @Author Axin
    * @DateTime 2018年10月17日 上午11:19:02
    * @param length
    * @return
    */
   public static String generalNumber(int length) {  
       StringBuffer sb = new StringBuffer();  
       Random random = new Random();  
       for (int i = 0; i < length; i++) {  
           sb.append(NUMBERCHAR.charAt(random.nextInt(NUMBERCHAR.length())));  
       }  
       return sb.toString();  
   }
 

 
 
   /**
    * 随机生成指定位数的全小写字符串，含数字 
    * @Author Axin
    * @DateTime 2018年10月17日 上午11:28:17
    * @param length
    * @return
    */
   public static String generateLowerString(int length) {  
       return generateString(length).toLowerCase();  
   }  
 
 
   /**
    * 随机生成指定位数的全大写字符串，含数字 
    * @Author Axin
    * @DateTime 2018年10月17日 上午11:28:17
    * @param length
    * @return
    */
   public static String generateUpperString(int length) {  
       return generateString(length).toUpperCase();  
   }  
 
 
   /**
    * 随机生成指定位数的 “0”
    * @Author Axin
    * @DateTime 2018年10月17日 上午11:29:56
    * @param length
    * @return
    */
   public static String generateZeroString(int length) {  
       StringBuffer sb = new StringBuffer();  
       for (int i = 0; i < length; i++) {  
           sb.append('0');  
       }  
       return sb.toString();  
   }  
 

   /**
    * 指定数字前面补充0，已达到指定长度，并返回字符串
    * @Author Axin
    * @DateTime 2018年10月17日 上午11:39:28
    * @param num
    * @param fixdlenth
    * @return
    */
   public static String toFixdLengthString(long num, int fixdlenth) {  
       StringBuffer sb = new StringBuffer();  
       String strNum = String.valueOf(num);  
       if (fixdlenth - strNum.length() >= 0) {  
           sb.append(generateZeroString(fixdlenth - strNum.length()));  
       } else {  
           throw new RuntimeException("指定长度必须大于指定数字‘"+num+"’的字符数量。");  
       }  
       sb.append(strNum);  
       return sb.toString();  
   }  
  

   /**
    * 从一个指定的int型数组中，生成指定长度的字符串，并返回
    * @Author Axin
    * @DateTime 2018年10月17日 上午11:41:57
    * @param param
    * @param len
    * @return
    */
    public static int getNotSimple(int[] param, int len) {  
        Random rand = new Random();  
        for (int i = param.length; i > 1; i--) {  
            int index = rand.nextInt(i);  
            int tmp = param[index];  
            param[index] = param[i - 1];  
            param[i - 1] = tmp;  
        }  
        int result = 0;  
        for (int i = 0; i < len; i++) {  
            result = result * 10 + param[i];  
        }  
        return result;  
    }  
  
    
   public static void main(String[] args) {
	   String notSimple = generalNumber(6);
	   System.out.println(notSimple);
	   
	   int a = -35;
	   System.out.println(a>>1);
	   System.out.println(a>>2);
	   System.out.println(a>>3);
	   System.out.println(a>>4);
	   System.out.println(a>>5);
	   System.out.println(a>>6);
	   System.out.println(a>>7);
	   System.out.println(a>>7);
	   System.out.println(a>>7);
	   System.out.println(a>>7);
	   System.out.println(a>>7);
	   System.out.println(a>>7);
	   System.out.println(a>>7);
	   System.out.println(a>>>31);
	   
	
   }
    
    
}  

